//
//  QLTabBar.swift
//  WeiBo
//
//  Created by 黄跃奇 on 16/9/19.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

//MARK: 1. (代理)定义代理协议
protocol QLTabBarDelegate: NSObjectProtocol {
    func didSelectedComposeButton()
}

class QLTabBar: UITabBar {
    
    //MARK: 3. (闭包)点击撰写按钮执行的闭包
    var composeButtonClosure: (()->())?
    
    //MARK: 2. (代理)定义代理对象
    weak var qlDelegate: QLTabBarDelegate?
    
    //懒加载
    lazy var composeButton: UIButton = {
        let button = UIButton()
        
        //MARK: 1. (闭包)添加点击事件
        button.addTarget(self, action: #selector(composeButtonAction), for: UIControlEvents.touchUpInside)
        
        //设置图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: UIControlState.normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: UIControlState.highlighted)
        
        //设置背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: UIControlState.normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: UIControlState.highlighted)
        //设置大小
        button.sizeToFit()
        
        return button
    }()
    
    //MARK: 2. (闭包)实现点击事件方法
    //private 修饰的这个事件函数，在swift运行循环里找不到
    //oc基于运行时使用kvc动态派发调用该方法, @objc 告诉编译器我们使用oc机制去调用这个方法
    @objc private func composeButtonAction() {
        print("哈哈")
        //MARK: 4. (闭包)执行撰写按钮的闭包
        composeButtonClosure?()
        
        //MARK: 3. (代理)使用代理对象调用代理方法
        //? 表示判断前面的对象是否为nil,如果为nil那么后面的代码就不执行,否则执行后面的代码
        qlDelegate?.didSelectedComposeButton()
    }
    
    //表示使用手写代码去创建对象
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    
    //使用xib或者storyboard创建对象的时候会调用该方法
    required init?(coder aDecoder: NSCoder) {
        
        //支持xib写法
        super.init(coder: aDecoder)
        
        setupUI()
        
    }
    
    //添加控件的函数
    private func setupUI() {
        
        //设置背景图片，防止push的时候右边出现黑色效果
        backgroundImage = UIImage(named: "tabbar_background")
        
        //添加子视图控件
        addSubview(composeButton)
    }
    
    //设置子控件的位置
    override func layoutSubviews() {
        super.layoutSubviews()
        //设置按钮的中心点
        composeButton.centerX = width / 2
        composeButton.centerY = height / 2
        
        //计算每个按钮的宽度
        let btnWidth = width / 5
        
        //记录遍历到的是第几个系统按钮的索引
        var index = 0
        
        //获取系统按钮的控件
        for value in subviews {
            //UITabBarButton是系统的私有类，不能直接使用
            if value.isKind(of: NSClassFromString("UITabBarButton")!) {
                value.width = btnWidth
                //设置系统按钮的x坐标
                value.x = CGFloat(index) * btnWidth
                index += 1
                //将要显示第三个系统按钮的时候让其加上中间加号按钮的宽度
                if index == 2 {
                    index += 1
                }
            }
        }
    }
}
















